#include <iostream>
using namespace std;

// 多继承语法

class Base1
{
public:
    int a;

    Base1()
    {
        a = 100;
    }
    
    void f() {
        cout << "Base1::f()" << endl;
    }
};

class Base2
{
public:
    int a;

    Base2()
    {
        a = 999;
    }
    
    void f() {
        cout << "Base2::f()" << endl;
    }
};

//子类 需要继承Base1和Base2
//语法：class 子类：继承方式 父类1，继承方式 父类2……
class Son:public Base1, public Base2
{
public:
    int c;
    int d;

    Son()
    {
        c = 300;
        d = 400;
    }
    
    //重写f()方法
    void f() {
        // 添加作用域，调用 从不同基类继承而来的 同名方法
        Base1::f();
        Base2::f();
    }
};

void test1()
{
    Son s;
    cout << "sizeof(Son) = " << sizeof(Son) << endl;

    //当父类中出现同名成员，需要加作用域区分，或者子类重写方法，或者使用虚继承
    cout << "Base1 a = " << s.Base1::a << endl;
    cout << "Base2 a = " << s.Base2::a << endl;
    //error: cout << s.a << endl;  编译器无法区分是哪个a
    
}

int main()
{
    test1();
    return 0;
}